package com.imooc.producer.c_delay;

import com.utils.Const;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2024/4/9-2024
 * @Description: 延迟消息
 *      消息发送到broker 之后，不会被立即消费。而是在指定时长之后才可以被消费处理的消息。被称为延迟消息。
 */
public class DelayProducer {
    public static void main(String[] args) throws Exception {
        //定义生产者
        DefaultMQProducer producer = new DefaultMQProducer("delay_producer");
        producer.setNamesrvAddr(Const.NAME_SERVER_SINGLE_LOCAL);

        //启动生产者
        producer.start();

        //发送消息
        for (int i = 0; i < 10; i++) {
            byte[] body = ("Hi, delay message " + i).getBytes();
            Message message = new Message("delay_topic", "tags_" + i, "key_" + i, body);
            /**
             * 设置延迟等级
             * 默认的延迟
             *      messageDelayLevel = 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
             * 如果我们设置 setDelayTimeLevel(3);  即：设置延迟等级为3 ， 那么我们根据配置的这个可以看出，延迟等级为3的时候，对应的延迟时间为  10s  。
             */
            message.setDelayTimeLevel(3);

            producer.send(message);
        }

        //关闭生产者
        producer.shutdown();
    }
}